home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 426-450 / disk_434 / backup / setfiledate.c < prev    next >
C/C++ Source or Header  |  1992-05-06  |  2KB  |  79 lines

  1.  
  2. /*
  3.  *  SETFILEDATE.C
  4.  *
  5.  *  BOOL = setfiledate(filename, date)
  6.  */
  7.  
  8. #include <exec/types.h>
  9. #include <exec/memory.h>
  10. #include <libraries/dos.h>
  11. #include <libraries/dosextens.h>
  12. #include <string.h>
  13.  
  14. typedef void *Pointer;
  15.  
  16. #ifndef ACTION_SET_DATE
  17. #define ACTION_SET_DATE 34
  18. #endif
  19.  
  20. typedef struct StandardPacket STDPKT;
  21. typedef struct Process          PROC;
  22. typedef struct DateStamp      DATESTAMP;
  23. typedef struct FileLock       LOCK;
  24. typedef struct Message          MSG;
  25.  
  26. void *AllocMem();
  27.  
  28. int
  29. setfiledate(file, date)
  30. char *file;
  31. DATESTAMP *date;
  32. {
  33.     STDPKT *packet;
  34.     char   *buf;
  35.     PROC   *proc;
  36.     long    result;
  37.     BPTR lock;
  38.     BPTR flock = Lock(file, SHARED_LOCK);
  39.     short i;
  40.     char *ptr = file;
  41.  
  42.     {
  43.     if (flock == NULL)
  44.         return(NULL);
  45.     lock = ParentDir(flock);
  46.     UnLock(flock);
  47.     if (!lock)
  48.         return(NULL);
  49.     for (i = strlen(ptr) - 1; i >= 0; --i) {
  50.         if (ptr[i] == '/' || ptr[i] == ':')
  51.         break;
  52.     }
  53.     file += i + 1;
  54.     }
  55.     proc   = (PROC *)FindTask(NULL);
  56.     packet = (STDPKT   *)AllocMem(sizeof(STDPKT), MEMF_CLEAR|MEMF_PUBLIC);
  57.     buf = AllocMem(strlen(file)+2, MEMF_PUBLIC);
  58.     strcpy(buf+1,file);
  59.     buf[0] = strlen(file);
  60.  
  61.     packet->sp_Msg.mn_Node.ln_Name = (char *)&(packet->sp_Pkt);
  62.     packet->sp_Pkt.dp_Link = &packet->sp_Msg;
  63.     packet->sp_Pkt.dp_Port = &proc->pr_MsgPort;
  64.     packet->sp_Pkt.dp_Type = ACTION_SET_DATE;
  65.     packet->sp_Pkt.dp_Arg1 = NULL;
  66.     packet->sp_Pkt.dp_Arg2 = (long)lock;        /*  lock on parent dir of file  */
  67.     packet->sp_Pkt.dp_Arg3 = (long)CTOB(buf);   /*  BPTR to BSTR of file name   */
  68.     packet->sp_Pkt.dp_Arg4 = (long)date;        /*  APTR to datestamp structure */
  69.     PutMsg(((LOCK *)BTOC(lock))->fl_Task, (MSG *)packet);
  70.     WaitPort(&proc->pr_MsgPort);
  71.     GetMsg(&proc->pr_MsgPort);
  72.     result = packet->sp_Pkt.dp_Res1;
  73.     FreeMem(packet, sizeof(STDPKT));
  74.     FreeMem(buf, strlen(file)+2);
  75.     UnLock(lock);
  76.     return(result);
  77. }
  78.  
  79.